package com.hulk.rpc.trace;

import com.hulk.rpc.utils.uuid.ObjectId;
import lombok.Data;

import java.io.Serializable;

/**
 * 调用跟踪
 */
@Data
public class Tracer implements Serializable {

  private static final long serialVersionUID = 7844937939139983900L;

  // 就是一个全局的跟踪ID, 是跟踪的入口点, 根据需求来决定在哪生成traceId。比如一个http请求, 首先入口是web应用,
  // 一般看完整的调用链这里自然是traceId生成的起点, 结束点在web请求返回点。(traceId, spanId)确定一个Span
  private ObjectId traceId;

  // 这是下一层的请求跟踪ID, 这个也根据自己的需求, 比如认为一次rpc,
  // 一次sql执行等都可以是一个span。一个traceId包含一个以上的spanId。
  private long spanId;

  // 上一次请求跟踪ID, 用来将前后的请求串联起来。
  private long parentId;

  // Client Send, 表示客户端发起请求
  private long cs;

  // Client Received, 表示客户端获取到服务端返回信息
  private long cr;

  // Server Send, 表示服务端完成处理，并将结果发送给客户端
  private long ss;

  // Server Receive, 表示服务端收到请求
  private long sr;

}
